package util.form.respuesta;

import util.form.pregunta.Restriccion2;
import util.form.respuesta.listener.OnInputInvalidoListener;
import util.form.respuesta.listener.ValorCommand2;


public abstract class AbstractInput2<I1 extends Input1, I2 extends Input1, C extends AbstractInput2<I1,I2,C>> 
extends AbstractInput<C,Restriccion2,Input2,ValorCommand2>
implements Input2
{
	
	/*
	@SuppressWarnings("unchecked")
	public C agregarAFormulario(Formulario f, String columna1, String columna2) {
		f.agregar(columna1, columna2, this);
		return (C)this;
	}*/
	
	@Override
	public boolean contieneValor(String valor) {
		return getInput1().contieneValor(valor) || getInput2().contieneValor(valor);
	}
	
	
	/*
	@Override
	protected final void onCambioValor() throws Exception {
		getInput1().onCambioValor(getInput1().getValor());
		getInput2().onCambioValor(getInput2().getValor());
	}
	*/

	/*
	@Override
	public void inicializar() throws Exception {
		
	}
	*/
	
	@Override
	protected void setRequeridoSubInputs(boolean requerido) {
		getInput1().setRequerido(requerido);
		getInput2().setRequerido(requerido);
		super.setRequeridoSubInputs(requerido);
	}
	
	@Override
	public final boolean isValido(OnInputInvalidoListener onInputInvalidoListener) throws Exception {
		return getInput1().isValido(onInputInvalidoListener) && getInput2().isValido(onInputInvalidoListener);
	}
	 
	public boolean isVacio() {
        return getInput1().isVacio() && getInput2().isVacio(); 
	}
					

	@Override
	protected void setRelevanciaSubInputs(boolean relevancia) {
		getInput1().setRelevancia(relevancia);
		getInput2().setRelevancia(relevancia);
		super.setRelevanciaSubInputs(relevancia);
	}

	@SuppressWarnings("unchecked")
	@Override
	public final C setValor(String valor1, String valor2) throws Exception {
		getInput1().setValor(valor1);
		getInput2().setValor(valor2);
		return (C)this;
	}
	
	@Override
	protected void soloLectura(boolean soloLectura) {
		getInput1().setSoloLectura(soloLectura);
		getInput2().setSoloLectura(soloLectura);		
	}
	
	@Override
	public abstract I1 getInput1();
	
	@Override
	public abstract I2 getInput2();

	@Override
	public void setMissing() throws Exception {
		getInput1().setMissing();
		getInput2().setMissing();
	}
	
}
